Lưu trữ ma trận thưa Ma trận thưa

Một ma trận thường được lưu lại bằng một mảng hai chiều. Mỗi phần tử trong mảng thể hiện một phần tử ai,j của ma trận và được truy cập bằng hai mảng i và j. Thông thường, i là chỉ số hàng, đánh số thứ tự từ trên xuống dưới, và j là chỉ số cột, đánh số thứ tự từ trái sang phải. Với một ma trận m × n, dung lượng bộ nhớ cần thiết để lưu trữ ma trận ở định dạng này tương ứng với m × n (bỏ qua thực tế là các kích thước của ma trận cũng cần được lưu trữ).

Với trường hợp ma trận thưa, yêu cầu giảm bộ nhớ lưu trữ một cách đáng kể có thể được thực hiện bằng cách chỉ lưu các phần tử khác 0. Tùy thuộc vào số lượng và sự phân bố của các phần tử khác 0, các cấu trúc dữ liệu khác nhau có thể được sử dụng và tiết kiệm rất nhiều bộ nhớ khi so sánh với cách lưu trữ cơ bản (như mảng 2 chiều). Tuy nhiên, khi làm điều này thì phải đánh đổi lại việc truy cập các phần tử đơn lẻ trở nên phức tạp hơn và cần có các cấu trúc bổ sung để có thể khôi phục ma trận ban đầu một cách rõ ràng.

Các định dạng có thể được chia thành hai nhóm:

  • Những định dạng hỗ trợ sửa đổi hiệu quả, chẳng hạn như DOK (từ điển khóa), LIL (danh sách các danh sách) hoặc COO (danh sách tọa độ). Các định dạng này thường được sử dụng để xây dựng các ma trận.
  • Những định dạng hỗ trợ truy cập hiệu quả và hoạt động ma trận, chẳng hạn như CSR (hàng thưa thớt được nén) hoặc CSC (cột thưa thớt được nén).